package com.huan.netty01.netty;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

import java.util.Scanner;

/**
 * @author 作者:刘欢
 * @create 2024-03-19-14:48
 */
public class MyClientHandler extends ChannelInboundHandlerAdapter {

    //当建立一个新的连接时调用 ChannelActive()
    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {

       while (true){
           System.out.println("输入向服务端发送的信息");
           Scanner scanner = new Scanner(System.in);
           String next = scanner.next();
           //发送消息到服务端
           ctx.writeAndFlush(Unpooled.copiedBuffer(next, CharsetUtil.UTF_8));
       }
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        //接收服务端发送过来的消息
        ByteBuf byteBuf = (ByteBuf) msg;
        System.out.println("收到服务端" + ctx.channel().remoteAddress() + "的消息：" + byteBuf.toString(CharsetUtil.UTF_8));
    }


//    @Override
//    public void channelActive(ChannelHandlerContext ctx) throws Exception {
//        System.out.println("客户端与服务端连接成功");
//
//        // 发送第一条消息给服务端
//        String sendMessage = "Hello from Client!";
//        ByteBuf out = Unpooled.copiedBuffer(sendMessage.getBytes(CharsetUtil.UTF_8));
//        ctx.writeAndFlush(out);
//    }

//    @Override
//    public void channelRead(ChannelHandlerContext ctx, Object msg) {
//        ByteBuf in = (ByteBuf) msg;
//        try {
//            // 读取服务端发送的消息
//            String receivedMessage = in.toString(io.netty.util.CharsetUtil.UTF_8);
//            System.out.println("客户端接收到消息：" + receivedMessage);
//
//            // 可以在这里再次发送新的消息给服务端，形成循环通信
//            // ...
//
//
//        } finally {
//            // 释放（ReferenceCounted）对象
//            in.release();
//        }
//    }
//
//    @Override
//    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
//        cause.printStackTrace();
//        ctx.close();
//    }
}
